package com.geovis.emergency.spd.biz.pc.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.geovis.emergency.spd.entity.command.enums.PlanFileTypeEnum;
import com.geovis.emergency.spd.entity.command.pojo.vo.CommandDrillDisasterVo;
import com.geovis.emergency.spd.entity.command.pojo.vo.CommandDrillEventAndPlanVo;
import com.geovis.emergency.spd.entity.command.pojo.vo.CommandDrillOrgVo;
import com.geovis.emergency.spd.entity.pc.entity.PcDisaster;
import com.geovis.emergency.spd.entity.pc.entity.PcDrill;
import com.geovis.emergency.spd.entity.pc.entity.PcDrillDisaster;
import com.geovis.emergency.spd.entity.pc.pojo.dto.PcDrillDisasterEventQueryDTO;
import com.geovis.emergency.spd.entity.pc.pojo.dto.PcDrillDisasterSchedulingDTO;
import com.geovis.emergency.spd.entity.pc.pojo.dto.PcDrillDisasterSubmitDTO;
import com.geovis.emergency.spd.entity.pc.pojo.vo.*;
import com.geovis.emergency.spd.entity.system.entity.SystemFile;
import com.geovis.emergency.spd.entity.system.pojo.vo.SystemUserVo;

import java.util.List;

/**
 * <p>
 * 应急预案指挥模块-演练灾害表 服务类
 * </p>
 *
 * @author Lonsho
 * @since 2022-06-08
 */
public interface IPcDrillDisasterService extends IService<PcDrillDisaster> {
    /**
     * 演练添加灾害事件
     * @param submitDTO
     */
    void submitEvent( PcDrillDisasterSubmitDTO submitDTO);
    void schedulingSubmitEvent(PcDrillDisasterSchedulingDTO saveDTO);
    /**
     * 清空事件
     * @param pcDrillId
     */
    void cleanEvent(String pcDrillId);


    /**
     * 克隆事件
     * @param pcDrillId
     * @param newPcDrillId
     */
    void cloneEvent(String pcDrillId,String newPcDrillId);

    /**
     * 获取演练灾害事件全部详情
     * @param pcDrillId

     * @return
     */
    PcDrillDisasterVO detailEvent(String pcDrillId);

    /**
     * 新版获取组织架构及人员
     */
    PcDrillOrgUsersVO getOrgUsers(String pcDrillId,String orgId,String deptId);

    /**
     * 查询人员
     */
    PcDrillOrgUsersVO queryUsers(String pcDrillId, String orgId, String keyword);

    /**
     * 新版获取人员(新方案)
     * @param pcDrillId
     * @param orgId
     * @param deptId
     * @return
     */
    List<SystemUserVo> queryOrgUsers(String deptId);


    PcDrillOrgUsersVO searchUsers(String keyword);
    /**
     * 新版获取组织架构(新方案)
     * @param deptId
     * @return
     */
    List<SystemDeptVo> queryOrgs(String deptId);

    List<SystemUserVo> queryOrgSelectUsers(String pcDrillId, String orgId);

    /**
     * 获取指挥系统生成的演练的组织机构
     * @param drillId 演练id
     * @return
     */
    List<CommandDrillOrgVo> getSchedulingDrillOrgs(String drillId);

    /**
     * 获取演练的事件列表(指挥系统调用)
     * @param drillId
     * @return
     */
    List<CommandDrillDisasterVo> getDisasterList(String drillId);

    List<CommandDrillEventAndPlanVo> getEventAndPlan(String drillId,String disasterEventId);

    List<SystemFile> getPlanFile(String pcDrillId,PlanFileTypeEnum type);

    PcDrillDisasterOrgVO getPlanDuty(String planId, boolean showPlanOrg);

    /**
     * 获取预案设置的组织与人员
     * @param planId
     * @return
     */
    PcDrillDisasterOrgVO getPlanOrgUsers(String planId);

    /**
     * 获取演练灾害事件单条详情
     * @param pcDrillDisasterEventQueryDTO
     * @return
     */
    PcDrillDisasterEventVO getDetail(PcDrillDisasterEventQueryDTO pcDrillDisasterEventQueryDTO);

    /**
     * 预设事件
     * @param pcDrillId
     * @return
     */
    List<PcDisaster> presetEvent(String pcDrillId);

    /**
     * 获取指挥类型的，未启动或正在演练中的演练
     * @param typhoonNo
     * @return
     */
    List<PcDrill> getDrillByTyphoonNo(String typhoonNo);
}
